home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 48 / Amiga Format CD48 (1999-12-13)(Future Publishing)(GB)(Track 1 of 2)[!][issue 2000-01].iso / -in_the_mag- / workbench / html / linkchecker-gui / linkchecker-gui.long < prev   
Text File  |  1999-11-13  |  31KB  |  986 lines

  1. /********************************************
  2.  * LinkChecker V2.1 with GUI                *
  3.  * $VER: 2.1  © Heiko Schröder  (07.07.98)  *
  4.  ********************************************/
  5.  
  6. /* =schnellere Speicherung der fehlerhaften Dateien in T:;
  7.     -> keine einzelnen Zeilen nacheinander sondern gesamt am Ende
  8.    =schnellere Speicherung der Tooltype-Daten
  9.    =schnelleres Finden von Links durch UNIX Regular Expressions (regexp.lib) -> 5% faster
  10.    =BugFix bei Files die im Hauptverzeichnis liegen (work:index.html)
  11.    =BugFix: Name des Dir/file bleibt erhalten, wenn im ReqTools ESC gedrückt wird
  12.    =BugFix bei Dateiname in Listenfeld (speziell bei file version)
  13.    =BugFix Korrektur der Anzeige der FailedLinks bei ../
  14.    =Extended: Start-Button nur verfügbar wenn Dir/File angegeben wurde
  15.    =Extended: I know Button in Info-Requester
  16.    =modularer Scriptaufbau (Procedures)
  17.    =unter unix äöüß-Check in Dateinamen für german users
  18.    =66% faster scan of orphaned files
  19.  
  20. zu tun:
  21.    nach background= suchen
  22. */
  23.  
  24. if ~show('L',"rexxreqtools.library") then
  25.    if ~addlib('rexxreqtools.library',0,-30,0) then do
  26.       say "Error... I need  Libs:rexxreqtools.library"
  27.       exit
  28.    end
  29. IF ~show('L','tritonrexx.library') then
  30.    IF ~ADDLIB('tritonrexx.library',0,-30,0) THEN DO
  31.       say "Error... I need the Libs:tritonrexx.library"
  32.       exit
  33.    END
  34. if ~show('L',"rexxtricks.library") then
  35.    if ~addlib('rexxtricks.library',10,-30,0) then do
  36.       say "Error... I need  Libs:rexxtricks.library"
  37.       exit
  38.    end
  39.  
  40. if ~show('L',"regexp.library") then
  41.    if ~addlib('regexp.library',5,-30,0) then do
  42.       say "Error... I need  Libs:regexp.library"
  43.       exit
  44.    end
  45.  
  46. R='0A'X
  47.  
  48. SIGNAL ON SYNTAX
  49. SIGNAL ON BREAK_C
  50.  
  51. Pname='LinkChecker-GUI'
  52.  
  53. editprog=RXTR_GETTOOLTYPEVALUE(Pname,EDITOR)
  54. IF editprog="" THEN editprog='MEmacs'
  55.  
  56. RexxCommand=RXTR_GETTOOLTYPEVALUE(Pname,REXXCOMMAND)
  57. IF RexxCommand="" THEN RexxCommand='Goto %line OPT W'
  58.  
  59. case=RXTR_GETTOOLTYPEVALUE(Pname,CASESENSITIVE)
  60. IF case="" THEN case=0
  61.  
  62. anchor=RXTR_GETTOOLTYPEVALUE(Pname,ANCHORLINK)
  63. IF anchor="" THEN anchor=0
  64.  
  65. notlinked=RXTR_GETTOOLTYPEVALUE(Pname,NOLINK)
  66. IF notlinked="" THEN notlinked=0
  67.  
  68. dir=RXTR_GETTOOLTYPEVALUE(Pname,DIRNAME)
  69. If dir ="" then do
  70.    dir ="Select a directory..."
  71.    nein=1
  72. end
  73. else nein=0
  74. dirtemp=dir
  75.  
  76. file=RXTR_GETTOOLTYPEVALUE(Pname,FILENAME)
  77. If file='' then file="Select a file..."
  78. filetemp=file
  79.  
  80. Artlist.0 = 2
  81. Artlist.1 = 'directory'
  82. Artlist.2 = 'file'
  83.  
  84. Art=1
  85.  
  86. /*-------------------- begin main window ---------------------*/
  87.  
  88. windowtags = WindowID(1),
  89.              WindowPosition('TRWP_CENTERDISPLAY'),
  90.              WindowFlags('TRWF_NOMINTEXTWIDTH'),
  91.              WindowTitle('LinkChecker V2.1 - 07/07/98'),
  92.              'HorizGroupAC SpaceS',
  93.                 'VertGroupA SpaceS',
  94.                    'HorizGroupAC',
  95.                       'SpaceS',
  96.                       CycleGadget('ArtList',Art-1,1) 'TRAT_Flags TRCY_RIGHTLABELS' 'TRAT_Flags TRCY_RIGHTLABELS',
  97.                       'SpaceS',
  98.                    'EndGroup',
  99.                    'HorizGroupAC',
  100.                       'SpaceS',
  101.                       GetEntryButton(2),
  102.                       StringGadget(dir,3),
  103.                       'SpaceS',
  104.                    'EndGroup',
  105.                    'SpaceB',
  106.                    'HorizGroupAC',
  107.                       'SpaceS',
  108.                       CheckBox(4) 'TRAT_Value' case,
  109.                       'SpaceS',
  110.                       TextID('_case sensitive filenames (for UNIX systems)',4),
  111.                       'SpaceS',
  112.                    'EndGroup',
  113.                    'SpaceS',
  114.                    'HorizGroupAC',
  115.                       'SpaceS',
  116.                       CheckBox(6) 'TRAT_Value' anchor,
  117.                       'SpaceS',
  118.                       TextID('check of _anchor links (e.g.: index.html#top)',6),
  119.                       'SpaceS',
  120.                    'EndGroup',
  121.                    'SpaceS',
  122.                    'HorizGroupAC',
  123.                       'SpaceS',
  124.                       CheckBox(5) 'TRAT_Value' notlinked,
  125.                       'SpaceS',
  126.                       TextID('list _orphaned files',5),
  127.                       'SpaceS',
  128.                    'EndGroup',
  129.                    'SpaceB',
  130.                    'HorizSeparator',
  131.                    'Space',
  132.                    'HorizGroupEC',
  133.                       'SpaceS',
  134.                       Button('_Start',10) 'TRAT_DISABLED' nein,
  135.                       'SpaceS',
  136.                       Button('Sa_ve',25),
  137.                       'SpaceS',
  138.                       Button('_Info',15),
  139.                       'SpaceS',
  140.                       Button('_Quit',20),
  141.                       'SpaceS',
  142.                    'EndGroup SpaceS',
  143.                 'EndGroup SpaceS',
  144.              'EndGroup SpaceS',
  145.           'EndProject'
  146.    app = TR_CREATEAPP('TRCA_Name Linker1')
  147.  
  148. IF app ~= '00000000'x THEN DO
  149.    window = TR_OPENPROJECT(app,windowtags)
  150.    IF window ~= '00000000'x THEN DO
  151.       ende = 0
  152.  
  153.       DO WHILE ~ende
  154.          CALL TR_WAIT(app,'')
  155.  
  156.          DO WHILE TR_HANDLEMSG(app,'event')
  157.             IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN ende=1
  158.  
  159.             IF event.trm_class = 'TRMS_NEWVALUE' THEN DO
  160.                SELECT
  161.                   WHEN event.trm_id = 1 THEN do
  162.                      Art=event.trm_data+1
  163.                      IF Art=1 then do
  164.                         CALL TR_SETATTRIBUTE(window,3,'TROB_String',dirtemp)
  165.                         If upper(dir)~="SELECT A DIRECTORY..." then CALL TR_SETATTRIBUTE(window,10,'TRAT_DISABLED',0)
  166.                            else CALL TR_SETATTRIBUTE(window,10,'TRAT_DISABLED',1)
  167.                         CALL TR_SETATTRIBUTE(window,5,'TRAT_DISABLED',0)
  168.                      END
  169.                      ELSE do
  170.                         CALL TR_SETATTRIBUTE(window,3,'TROB_String',filetemp)
  171.                         If upper(file)~="SELECT A FILE..." then CALL TR_SETATTRIBUTE(window,10,'TRAT_DISABLED',0)
  172.                            else CALL TR_SETATTRIBUTE(window,10,'TRAT_DISABLED',1)
  173.                         CALL TR_SETATTRIBUTE(window,5,'TRAT_DISABLED',1)
  174.                      END
  175.                   END
  176.  
  177.                   OTHERWISE NOP
  178.                END
  179.             End
  180.  
  181.             IF event.trm_class = 'TRMS_ACTION' THEN DO
  182.                SELECT
  183.  
  184.                   WHEN event.trm_id = 2 THEN Do      /*RequesterKnopf*/
  185.  
  186.                      If Art=1 then do                 /*Verz*/
  187.                         dir=dirtemp
  188.                         dir=rtfilerequest(dir,,"Select a directory...",,"rtfi_flags = freqf_nofiles")
  189.                         if dir~='' then do
  190.                            CALL TR_SETATTRIBUTE(window,3,'TROB_String',dir)
  191.                            CALL TR_SETATTRIBUTE(window,10,'TRAT_DISABLED',0)
  192.                         end
  193.                         else dir=dirtemp
  194.                         dirtemp=dir
  195.                      END
  196.  
  197.                      If Art=2 then do                 /*File*/
  198.                         file=filetemp
  199.                         dire=RXTR_PATHPART(file)
  200.                         file=rtfilerequest(dire,,"Select a file...",,"rtfi_matchpat=#?.#?(htm|html)")
  201.                         if file~='' then do
  202.                            CALL TR_SETATTRIBUTE(window,3,'TROB_String',file)
  203.                            CALL TR_SETATTRIBUTE(window,10,'TRAT_DISABLED',0)
  204.                         END
  205.                         else file=filetemp
  206.                         filetemp=file
  207.                         pos = lastpos('/',file)
  208.                         IF (pos ~=0) then dir=RXTR_PATHPART(file)||"/"
  209.                            else dir=RXTR_PATHPART(file)
  210.                      END
  211.                   END
  212.  
  213.                   WHEN event.trm_id = 10 THEN  do              /*Start*/
  214.                      Call Auslesen
  215.  
  216.                      If exists(dir)=1 then do 
  217.                         CALL RXTR_GETDIR(dir,,'tempfile','FILES','PATH')  /* test, ob html im hauptdir */
  218.                         a=0
  219.                         Do i=1 to tempfile.0
  220.                            If MATCHPATTERN(tempfile.i,'#?.#?(htm|html)')~=0 then do
  221.                               a=a+1
  222.                               leave
  223.                            End
  224.                         End
  225.  
  226.                         If a=0 then
  227.                            call rtezrequest("Please select a directory"||R||"where at least a HTML file is located",,"Error message",, fonttag)
  228.                         else do
  229.                            htmlfile.0=a
  230.                            Call secondscreen
  231.                         End
  232.                      End
  233.                      else call rtezrequest("The selected directory (file)"||R||"doesn't exist...",,"File error",, fonttag)
  234.                         
  235.  
  236.                   End
  237.  
  238.                   WHEN event.trm_id = 15 THEN                  /*Info*/
  239.                      call rtezrequest("LinkChecker 2.1 (Mailware)"R"© 1997-1998 Heiko Schröder"R"email: age@thepentagon.com"R"http://www.yi.com/home/SchroederHeiko"R||R"Please visit my last project:"R"http://www.leipzig-info.net",,"Infos about the program",, fonttag)
  240.  
  241.                   WHEN event.trm_id = 20 THEN ende=1             /*Cancel*/
  242.  
  243.                   WHEN event.trm_id = 25 THEN do                  /*Save*/
  244.                      Call Auslesen
  245.                      tt.0=7
  246.                      tt.1="EDITOR="||editprog
  247.                      tt.2="REXXCOMMAND="||RexxCommand
  248.                      tt.3="CASESENSITIVE="||case
  249.                      tt.4="ANCHORLINK="||anchor
  250.                      tt.5="NOLINK="||notlinked
  251.                      tt.6="DIRNAME="||dir
  252.                      tt.7="FILENAME="||file
  253.  
  254.                      CALL RXTR_SETTOOLTYPES(Pname,tt)
  255.                      CALL RXTR_GETKEY(1)
  256.  
  257.                   End
  258.  
  259.                   OTHERWISE NOP
  260.                END
  261.             END
  262.          END
  263.       END
  264.       CALL TR_CLOSEPROJECT(window)
  265.    END
  266.    CALL TR_DELETEAPP(app)
  267. END
  268. ELSE
  269.    CALL quit('Kann das Fenster nicht öffnen',10)
  270.  
  271. /*-------------------- end main window ---------------------*/
  272.  
  273. EXIT
  274.  
  275. Auslesen:
  276.    case=TR_GETATTRIBUTE(window,4,'TRAT_VALUE')
  277.  
  278.    notlinked=TR_GETATTRIBUTE(window,5,'TRAT_VALUE')
  279.    If Art=2 then notlinked=0     /* bei files Check kein FilesNOTLINKED */
  280.    anchor=TR_GETATTRIBUTE(window,6,'TRAT_VALUE')
  281.  
  282.    If art=1 then 
  283.       dir=dirtemp
  284.    else do
  285.       file=filetemp
  286.       pos = lastpos('/',file)
  287.       IF (pos ~=0) then dir=RXTR_PATHPART(file)||"/"
  288.          else dir=RXTR_PATHPART(file)
  289.    end
  290.  
  291. Return
  292.  
  293. secondscreen:
  294.  
  295.    filelink.0=0
  296.    AnkerLink.0=0
  297.    notcased.0=0
  298.    notused.0=0
  299.  
  300.    schonused.0=0
  301.  
  302.    If case=1 then ablecase=0
  303.       else ablecase=1
  304.  
  305.    If notlinked=1 then ablenotlinked=0
  306.       else ablenotlinked=1
  307.  
  308.    If anchor=1 then ableanchor=0
  309.       else ableanchor=1
  310.  
  311. /*-------------------- begin result window ---------------------*/
  312.  
  313. windowtags = WindowID(2),
  314.              WindowPosition('TRWP_CENTERDISPLAY'),
  315.              WindowTitle('Result of checking links'),
  316.             'HorizGroupAC SpaceS',
  317.                'VertGroupA SpaceS',
  318.                   'HorizGroupAC SpaceS',
  319.                      'VertGroupA SpaceS',
  320.                         TextN('broken link in:'),
  321.                         'SpaceS',
  322.                         ListSS(filelink,1,0,0) 'TRAT_MINWIDTH 12',
  323.                         'HorizGroupE',
  324.                            Button('Info',11),
  325.                            'SpaceS',
  326.                            Button('I know...',111),
  327.                         'EndGroup',
  328.                         'SpaceB',
  329.                         TextN('broken case sensitive link in:'),
  330.                         'SpaceS',
  331.                         ListSS(notcased,3,0,0) 'TRAT_MINWIDTH 12' 'TRAT_DISABLED' ablecase,
  332.                         'HorizGroupE',
  333.                            Button('Info',33) 'TRAT_DISABLED' ablecase,
  334.                            'SpaceS',
  335.                            Button('I know...',333) 'TRAT_DISABLED' ablecase,
  336.                         'EndGroup',
  337.                         'Space',
  338.                      'EndGroup SpaceS',
  339.                      'Space',
  340.                      'VertSeparator',
  341.                      'Space',
  342.                      'VertGroupA SpaceS',
  343.                         TextN('broken anchor link in:'),
  344.                         'SpaceS',
  345.                         ListSS(AnkerLink,2,0,0) 'TRAT_MINWIDTH 12' 'TRAT_DISABLED' ableanchor,
  346.                         'HorizGroupE',
  347.                            Button('Info',22) 'TRAT_DISABLED' ableanchor,
  348.                            'SpaceS',
  349.                            Button('I know...',222) 'TRAT_DISABLED' ableanchor,
  350.                         'EndGroup',
  351.                         'SpaceB',
  352.                         TextN('orphaned files:'),
  353.                         'SpaceS',
  354.                         ListSS(notused,4,0,0) 'TRAT_MINWIDTH 12' 'TRAT_DISABLED' ablenotlinked,
  355.                         'HorizGroupE',
  356.                            Button('Delete',44) 'TRAT_DISABLED' ablenotlinked,
  357.                            'SpaceS',
  358.                            Button('I know...',444) 'TRAT_DISABLED' ablenotlinked,
  359.                         'EndGroup',
  360.                         'Space',
  361.                      'EndGroup SpaceS',
  362.                   'EndGroup',
  363.                   'HorizGroupA',
  364.                   'SpaceS',
  365.                   Progress(100,0,7),
  366.                   'SpaceS',
  367.                'EndGroup',
  368.                'SpaceS',
  369.                'HorizGroupA',
  370.                   'SpaceS',
  371.                   TextN("Status:"),
  372.                   'SpaceS',
  373.                   TextID("Start check...",8) 'TRAT_MinWidth 25' 'TRAT_FLAGS TRTX_NOUNDERSCORE',
  374.                'EndGroup',
  375.                'SpaceS',
  376.             'EndGroup SpaceS',
  377.          'EndGroup SpaceS',
  378.       'EndProject'
  379.    app2 = TR_CREATEAPP('TRCA_Name Linker3')
  380. IF app2 ~= '00000000'x THEN DO
  381.    window2 = TR_OPENPROJECT(app2,windowtags)
  382.    IF window2 ~= '00000000'x THEN DO
  383.       ende2 = 0
  384.  
  385.       Call Start
  386.       t=1
  387.  
  388.       DO WHILE ~ende2
  389.          CALL TR_WAIT(app2,'')
  390.  
  391.          DO WHILE TR_HANDLEMSG(app2,'event')
  392.             IF event.trm_class = 'TRMS_CLOSEWINDOW' THEN ende2=1
  393.  
  394.             IF event.trm_class = 'TRMS_NEWVALUE' THEN DO
  395.                SELECT
  396.                   WHEN event.trm_id = 1 THEN Art=event.trm_data+1
  397.  
  398.                   OTHERWISE NOP
  399.                END
  400.             End
  401.  
  402.             IF event.trm_class = 'TRMS_ACTION' THEN DO
  403.                SELECT
  404.                   WHEN event.trm_id = 11 THEN do      /*Info falsch gelinkt*/
  405.                      If FileLink.0=0 then leave
  406.                      t=TR_GETATTRIBUTE(window2,1,'TRAT_VALUE')+1
  407.                      call rtezrequest("File: "failfile.t||R||"links to: "faillink.t||R||"at line: "failline.t,"Edit|I know|Cancel","»Failed Link«",, fonttag)
  408.                      If result=1 then do
  409.                         Datei=failfile.t
  410.                         Call editieren failline.t
  411.                      End
  412.                      If result=2 then Call iknowfailedlink
  413.                   END
  414.  
  415.                   WHEN event.trm_id =111 THEN Call iknowfailedlink
  416.  
  417.  
  418.  
  419.                   WHEN event.trm_id = 22 THEN Do       /*Info falscher Anchor*/
  420.                      If AnkerLink.0=0 then leave
  421.                      t=TR_GETATTRIBUTE(window2,2,'TRAT_VALUE')+1
  422.                      call rtezrequest("File: "failankerfile.t||R||"links to: "failankerlink.t||R||"at line: "failankerline.t,"Edit|I know|Cancel","»Failed anchor link«",, fonttag)
  423.                      If result=1 then do
  424.                         Datei=failankerfile.t
  425.                         Call editieren failankerline.t
  426.                      End
  427.                      If result=2 then Call iknowfailedanchorlink
  428.  
  429.                   End
  430.  
  431.                   WHEN event.trm_id =222 THEN Call iknowfailedanchorlink  /*I know falscher Anchor*/
  432.  
  433.  
  434.  
  435.                   WHEN event.trm_id = 33 THEN Do       /*Info falscher UnixLink*/
  436.                      If notcased.0=0 then leave
  437.                      t=TR_GETATTRIBUTE(window2,3,'TRAT_VALUE')+1
  438.                      call rtezrequest("File: "failcasefile.t||R||"links to: "failcaselink.t||R||"at line: "failcaseline.t,"Edit|I know|Cancel","»Failed case sensitve link«",, fonttag)
  439.                      If result=1 then do
  440.                         Datei=failcasefile.t
  441.                         Call editieren failcaseline.t
  442.                      End
  443.                      If result=2 then Call iknowfailedcaselink
  444.                   END
  445.  
  446.                   WHEN event.trm_id =333 THEN Call iknowfailedcaselink
  447.  
  448.                   WHEN event.trm_id = 44 THEN do       /*Info leeres file*/
  449.                      If notused.0=0 then leave
  450.                      t=TR_GETATTRIBUTE(window2,4,'TRAT_VALUE')+1
  451.                      dir=Strip(dir,'B',d2c(34))
  452.  
  453.                      CALL rtezrequest("Do you really want to delete file:"||R||dir||notused.t,"Yes|No","» A T T E N T I O N «",, fonttag)
  454.                      If result=1 then do
  455.                         address command "delete "||d2c(34)||dir||notused.t||d2c(34)" QUIET"
  456.  
  457.                         CALL RXTR_STEMREMOVE(notused,t)
  458.                         Call TR_SETATTRIBUTE(window2,4,'TROB_LISTVIEW',notused)
  459.                      end
  460.                   End
  461.  
  462.                   WHEN event.trm_id =444 THEN Do       /*I know leeres File*/
  463.                      If notused.0=0 then leave
  464.                      t=TR_GETATTRIBUTE(window2,4,'TRAT_VALUE')+1
  465.  
  466.                      /* neu sortieren*/
  467.                      CALL RXTR_STEMREMOVE(notused,t)
  468.  
  469.                      Call TR_SETATTRIBUTE(window2,4,'TROB_LISTVIEW',notused)
  470.                   End
  471.  
  472.                   OTHERWISE NOP
  473.                END
  474.             END
  475.  
  476.          END
  477.       END
  478.       CALL TR_CLOSEPROJECT(window2)
  479.    END
  480.    CALL TR_DELETEAPP(app2)
  481. END
  482. ELSE
  483.    CALL quit('Kann das Fenster nicht öffnen',10)
  484.  
  485. /*-------------------- end result window ---------------------*/
  486.  
  487. Return
  488.  
  489. /*-------------*/
  490. iknowfailedlink:
  491.    If FileLink.0=0 then leave
  492.    t=TR_GETATTRIBUTE(window2,1,'TRAT_VALUE')+1
  493.    /* neu sortieren*/
  494.  
  495.    CALL RXTR_STEMREMOVE(FileLink,t)
  496.    CALL RXTR_STEMREMOVE(failfile,t)
  497.    CALL RXTR_STEMREMOVE(faillink,t)
  498.    CALL RXTR_STEMREMOVE(failline,t)
  499.  
  500.    Call TR_SETATTRIBUTE(window2,1,'TROB_LISTVIEW',FileLink)
  501. Return
  502.  
  503. /*-------------*/
  504. iknowfailedanchorlink:
  505.    If AnkerLink.0=0 then leave
  506.    t=TR_GETATTRIBUTE(window2,2,'TRAT_VALUE')+1
  507.                   
  508.    /* neu sortieren*/
  509.    CALL RXTR_STEMREMOVE(AnkerLink,t)
  510.    CALL RXTR_STEMREMOVE(failankerfile,t)
  511.    CALL RXTR_STEMREMOVE(failankerlink,t)
  512.    CALL RXTR_STEMREMOVE(failankerline,t)
  513.  
  514.    Call TR_SETATTRIBUTE(window2,2,'TROB_LISTVIEW',AnkerLink)
  515. Return
  516.  
  517. /*-------------*/
  518. iknowfailedcaselink:
  519.    If notcased.0=0 then leave
  520.    t=TR_GETATTRIBUTE(window2,3,'TRAT_VALUE')+1
  521.  
  522.    /* neu sortieren*/
  523.    CALL RXTR_STEMREMOVE(notcased,t)
  524.    CALL RXTR_STEMREMOVE(failcasefile,t)
  525.    CALL RXTR_STEMREMOVE(failcaselink,t)
  526.    CALL RXTR_STEMREMOVE(failcaseline,t)
  527.  
  528.    Call TR_SETATTRIBUTE(window2,3,'TROB_LISTVIEW',notcased)
  529. Return
  530.  
  531. /*-------------*/
  532. Editieren:
  533.    Parse ARG DateiZeile
  534.  
  535.    rexx1=""; rexx2=""
  536.    poss=pos("%LINE",upper(RexxCommand))
  537.    If (poss~="" & poss~=0) then do
  538.       rexx1=Left(RexxCommand,poss-1)
  539.       rexx2=Delstr(RexxCommand,1,poss+5)
  540.    End
  541.    If exists(editprog)=1 then address command editprog d2c(34)||Datei||d2c(34) rexx1 Dateizeile rexx2
  542.       else call rtezrequest("Can't find editor:"||R||editprog||R||R||"Please edit the tooltypes of the icon.",,"»Tooltype error«",, fonttag)
  543. Return
  544.  
  545. /*--------*/
  546. Start:
  547. /*--------*/
  548.  
  549.    jj=0
  550.  
  551.    If Art=1 then do
  552.  
  553.       dir=Strip(dir,'B',d2c(34))
  554.  
  555.       CALL TR_SETATTRIBUTE(window2,8,'TRAT_TEXT',"")
  556.       CALL TR_SETATTRIBUTE(window2,8,'TRAT_TEXT',"Scaning directory...")
  557.  
  558.       CALL RXTR_GETDIR(dir,,'tempfile','FILES','PATH','SUBDIRS')
  559.    end /* directory */
  560.  
  561.    If Art=2 then do
  562.       GesMenge=1
  563.  
  564.       pos = lastpos('/',file)
  565.       IF (pos ~=0) then dir=RXTR_PATHPART(file)||"/"
  566.          else dir=RXTR_PATHPART(file)
  567.  
  568.       tempfile.0=1
  569.       tempfile.1=file
  570.  
  571.    End /* file */
  572.  
  573.    laenge=Length(dir)
  574.  
  575. /*-------------------------*/
  576. /* Einlesen der Dateinamen für Unix + Files not linked Kontrolle */
  577. /*-------------------------*/
  578.  
  579.    If case=1 then do /* UNIX oder NichtGelinkt*/
  580.  
  581.       Do i=1 to tempfile.0
  582.          cased.i=Delstr(tempfile.i,1,laenge)
  583.       End
  584.       cased.0=tempfile.0
  585.    end
  586.  
  587.  
  588. /*-------------------------*/
  589. /* nur htm/l speichern */
  590. /*-------------------------*/
  591.       a=0
  592.       Do i=1 to tempfile.0
  593.          If MATCHPATTERN(tempfile.i,'#?.#?(htm|html)')~=0 then do
  594.             a=a+1
  595.             htmlfile.a=tempfile.i
  596.          End
  597.       End
  598.       htmlfile.0=a
  599.       GesMenge=htmlfile.0
  600.  
  601. /*-------------------------*/
  602. /* Suchen anch Anchor Namen */
  603. /*-------------------------*/
  604.  
  605.    If anchor=1 then do
  606.       AnkerAnzahl=0
  607.  
  608.       CALL TR_SETATTRIBUTE(window2,8,'TRAT_TEXT',"")
  609.       CALL TR_SETATTRIBUTE(window2,8,'TRAT_TEXT',"Scaning files for anchors...")
  610.       Do i=1 to GesMenge
  611.          Zeile=0
  612.          Call RXTR_READFILE(htmlfile.i,lines)
  613.          Do While 1
  614.             Zeile = LSEARCH('#?<A NAME=#?',lines,Zeile+1,'NOCASE','PATTERN')
  615.             If Zeile=-1 then leave
  616.  
  617.             line = lines.Zeile
  618.  
  619.             DO WHILE 1
  620.                pos1 = pos('<A NAME=',upper(line))
  621.                IF pos1 = 0 then leave
  622.                pos2 = pos('>',upper(line),pos1)
  623.  
  624.                Anker=Delstr(line,pos2)
  625.                Anker=Delstr(Anker,1,pos1+7)
  626.                Anker=Strip(Anker,'B',d2c(34))
  627.  
  628.                AnkerAnzahl=AnkerAnzahl+1
  629.                Ankers.AnkerAnzahl=Delstr(htmlfile.i,1,laenge)||"#"||Anker    /*beinhaltet die Anker -> xyz.html#anker*/
  630.                line=Delstr(line,1,pos2)
  631.                   
  632.             END
  633.  
  634.          End
  635.          prozent=Trunc(i/GesMenge*100)
  636.          CALL TR_SETATTRIBUTE(window2,7,'TRAT_Value',prozent)
  637.       End
  638.       Ankers.0=AnkerAnzahl
  639.  
  640.    End
  641.  
  642.  
  643. /*-------------------------*/
  644. /* Start des LinkCheckers */
  645. /*-------------------------*/
  646. Time('R')
  647. Fehler=0; UnixFehler=0; AnkerFehler=0
  648. Links=0
  649.  
  650. CALL TR_SETATTRIBUTE(window2,7,'TRAT_Value',0)
  651.  
  652. DO Datei=1 TO GesMenge
  653.    htmlfile = htmlfile.Datei
  654.    htmlfilekurz=RXTR_FILEPART(htmlfile)
  655.  
  656.    pos = lastpos('/',htmlfile)
  657.    IF (pos ~=0) then verz=RXTR_PATHPART(htmlfile)||"/"
  658.       else verz=RXTR_PATHPART(htmlfile)
  659.    help=verz
  660.  
  661.    ende=0;zeile=0
  662.  
  663.    CALL TR_SETATTRIBUTE(window2,8,'TRAT_TEXT',"")
  664.    CALL TR_SETATTRIBUTE(window2,8,'TRAT_TEXT',"Checking "||Delstr(htmlfile,1,laenge))
  665.  
  666.    Call RXTR_READFILE(htmlfile,lines)
  667.  
  668.  
  669. /*-------------------------*/
  670. /* Dateinamen checken*/
  671. /*-------------------------*/
  672.    If case=1 then
  673.       If reindex(upper(htmlfilekurz), "[ÄÖÜß]")~=0 then do
  674.          UnixFehler=UnixFehler+1
  675.          CaseFehler.0=UnixFehler
  676.          CaseFehler.UnixFehler=htmlfilekurz||" -> ÄÖÜäöüß in filename -> filename: "||htmlfilekurz
  677.  
  678.          notcased.0=UnixFehler
  679.          notcased.UnixFehler=htmlfilekurz
  680.  
  681.          Call TR_SETATTRIBUTE(window2,3,'TROB_LISTVIEW',notcased)
  682.  
  683.          failcasefile.UnixFehler=htmlfilekurz
  684.          failcaselink.UnixFehler="including äöüß"
  685.          failcaseline.UnixFehler=''
  686.       END
  687.  
  688. /*-------------------------*/
  689. /* Read all links of a file*/
  690. /*-------------------------*/
  691.  
  692.    Zahl=0; zeile=0
  693.    Do while 1
  694.       Zeile = LSEARCH('#?(HREF=|SRC=)#?',lines,Zeile+1,'NOCASE','PATTERN')
  695.       If Zeile=-1 then leave
  696.  
  697.       pos=pos("SRC=",upper(lines.zeile))
  698.       pos1=pos("HREF=",upper(lines.zeile))
  699.  
  700.          if ((pos=0) | (pos1<pos & pos1~=0)) then Call LinkAuslesen pos1
  701.             else Call LinkAuslesen pos
  702.  
  703.    End
  704.    link.0=Zahl
  705.  
  706.    links=links+Zahl
  707.  
  708.    DO i=1 to link.0
  709.       link=link.i
  710.  
  711.       if pos(""", upper(link))~=0 then leave
  712.       If pos("CGI-BIN/",upper(link))~=0 then leave
  713.  
  714. /*-------------------------*/
  715. /* Check Unix maindirectory */
  716. /*-------------------------*/
  717.  
  718.       parent=false
  719.       If pos("/",link)=1 then do                  /*/images/usw = Hauptpfad */
  720.          verz=dir
  721.          oldlink=link; parent=true
  722.          link=delstr(link,1,1)
  723.       End
  724.  
  725. /*-------------------------*/
  726. /* Check Unix predirectory */
  727. /*-------------------------*/
  728.  
  729.       If pos("../",link)~=0 then do
  730.          verz=RXTR_PATHPART(htmlfile)
  731.          Do While 1
  732.             pos3 = pos("../",link)                   /*../ filtern*/
  733.             if (pos3 ~=0 & parent=false) then do
  734.                oldlink=link; parent=true
  735.             End
  736.             if pos3 ~=0 then do
  737.                hilfsverz=left(verz,Length(verz)-1)
  738.                link=DelStr(link,pos3,pos3+2)
  739.                posx=pos(":",hilfsverz)
  740.                posy=lastpos("/",hilfsverz)
  741.                pos4=max(posx,posy)
  742.                if pos4~=0 then hilfsverz=Left(hilfsverz,pos4-1)
  743.                help=verz                        /*Unterverz -> reales Dir übergeben*/
  744.                If pos4~=posx then verz=hilfsverz||"/"
  745.                   else verz=hilfsverz||":"
  746.             end
  747.             else leave
  748.          End
  749.       End
  750.  
  751.       If link='' then leave
  752.       geprueft=false
  753.  
  754. /*--------------------*/
  755. /* Check Anchor links */
  756. /*--------------------*/
  757.  
  758.       if (anchor=1 & pos("#",link)~=0) then do
  759.          If pos("#",link)=1 then link=Delstr(htmlfile,1,Length(verz))||link
  760.          If LSEARCH(link,ankers)=-1 then do       /* Fehler */
  761.             AnkerFehler=AnkerFehler+1
  762.  
  763.             If parent=true then link=oldlink
  764.  
  765.             anchorfehler.0=AnkerFehler
  766.             anchorfehler.AnkerFehler=htmlfile||" -> "||link||" -> line: "||Linkzeile.i
  767.  
  768.             AnkerLink.0=AnkerFehler
  769.             AnkerLink.AnkerFehler=htmlfilekurz
  770.  
  771.             Call TR_SETATTRIBUTE(window2,2,'TROB_LISTVIEW',AnkerLink)
  772.  
  773.             FailAnkerFile.AnkerFehler=htmlfile
  774.             FailAnkerLink.AnkerFehler=link
  775.             FailAnkerLine.AnkerFehler=Linkzeile.i
  776.  
  777.          End
  778.          geprueft=true
  779.       End
  780.  
  781.       If (geprueft=false & pos("#",link)~=0) then link=Delstr(link,pos("#",link))
  782.  
  783. /*--------------------*/
  784. /* Check normal links */
  785. /*--------------------*/
  786.  
  787.       If (geprueft=false & link~='') then
  788.          If exists(verz||link)~=1 then do
  789.             Fehler=Fehler+1
  790.             Call AnkerInOldlink
  791.  
  792.             HauptFehler.0=Fehler
  793.             HauptFehler.Fehler=htmlfile||" -> "||link||" -> line: "||Linkzeile.i
  794.  
  795.             FileLink.0=Fehler
  796.             FileLink.Fehler=htmlfilekurz
  797.  
  798.             Call TR_SETATTRIBUTE(window2,1,'TROB_LISTVIEW',FileLink)
  799.  
  800.             failfile.Fehler=htmlfile
  801.             faillink.Fehler=link
  802.             failline.Fehler=Linkzeile.i
  803.  
  804.             geprueft=true
  805.          end
  806.  
  807. /*---------------------*/
  808. /*Unix-kontrolle       */
  809. /*auch noch üöäß prüfen*/
  810. /*---------------------*/
  811.  
  812.       If (geprueft=false & case=1 & link~='') then
  813.          If LSEARCH(link,cased,,'CASE')=-1 then do       /* Fehler */
  814.             UnixFehler=UnixFehler+1
  815.             Call AnkerInOldlink
  816.  
  817.             CaseFehler.0=UnixFehler
  818.             CaseFehler.UnixFehler=htmlfile||" -> "||link||" -> line: "||Linkzeile.i
  819.  
  820.             notcased.0=UnixFehler
  821.             notcased.UnixFehler=htmlfilekurz
  822.  
  823.             Call TR_SETATTRIBUTE(window2,3,'TROB_LISTVIEW',notcased)
  824.  
  825.             failcasefile.UnixFehler=htmlfile
  826.             failcaselink.UnixFehler=link
  827.             failcaseline.UnixFehler=Linkzeile.i
  828.  
  829.          End
  830.  
  831. /*--------------------*/
  832. /* schon gelinkt auf die Seite ? */
  833. /*--------------------*/
  834.  
  835.       If notlinked=1 then do
  836.          If case=0 then start=LSEARCH(link,schonused,,'NOCASE','STRCMP')
  837.             else start=LSEARCH(link,schonused,,'CASE','STRCMP')
  838.  
  839.          If start=-1 then do
  840.             jj=jj+1
  841.             schonused.jj=link
  842.          End
  843.       End
  844.  
  845.       verz=help
  846.    END
  847.    prozent=Trunc(Datei/GesMenge*100)
  848.    CALL TR_SETATTRIBUTE(window2,7,'TRAT_Value',prozent)
  849.  
  850. END
  851. Close("HTML")
  852. Call Schreiben
  853.  
  854. schonused.0=jj
  855.  
  856. failfile.0=Fehler
  857. faillink.0=Fehler
  858. failline.0=Fehler
  859.  
  860. failcasefile.0=UnixFehler
  861. failcaselink.0=UnixFehler
  862. failcaseline.0=UnixFehler
  863.  
  864. failankerfile.0=AnkerFehler
  865. failankerlink.0=AnkerFehler
  866. failankerline.0=AnkerFehler
  867.  
  868.  
  869. /* aus notused löschen */
  870. If notlinked=1 then do
  871.  
  872.    CALL TR_SETATTRIBUTE(window2,8,'TRAT_TEXT',"Searching for orphaned files...")
  873.    CALL TR_SETATTRIBUTE(window2,7,'TRAT_Value',0)
  874.  
  875.    nu=0
  876.    Do i=1 to tempfile.0
  877.       tempfile.i=Delstr(tempfile.i,1,Length(verz))
  878.       If case=0 then 
  879.          If LSEARCH(tempfile.i,schonused,,'NOCASE','STRCMP')=-1 then Call nuUebergabe
  880.       Else
  881.          If LSEARCH(tempfile.i,schonused,,'CASE','STRCMP')=-1 then Call nuUebergabe
  882.       prozent=Trunc(i/tempfile.0*100)
  883.       CALL TR_SETATTRIBUTE(window2,7,'TRAT_Value',prozent)
  884.    End
  885. End
  886. Zeit=TIME('E')
  887. CALL TR_SETATTRIBUTE(window2,8,'TRAT_TEXT',"")
  888. CALL TR_SETATTRIBUTE(window2,8,'TRAT_TEXT',"Ready. I checked "||GesMenge||" files with "||links||" links in "||Zeit||" secs.")
  889.  
  890. Return
  891.  
  892. nuUebergabe:
  893.    nu=nu+1
  894.    notused.nu=tempfile.i; notused.0=nu
  895.    Call TR_SETATTRIBUTE(window2,4,'TROB_LISTVIEW', notused)
  896. Return
  897.  
  898. /* Links einer Datei in Link.0 einlesen */
  899. LinkAuslesen:
  900.    Parse Arg wo
  901.    If wo>1 then lines.zeile=Delstr(lines.zeile,1,wo-1)
  902.  
  903.    pos2=pos(">",lines.zeile)
  904.    If pos2>0 then do 
  905.       a=Left(lines.zeile,pos2)
  906.       lines.zeile=Delstr(lines.zeile,1,pos2)
  907.    End
  908.    else do
  909.       a=lines.zeile
  910.       lines.zeile=''
  911.    end
  912.  
  913.    if pos("MAILTO:", upper(a))~=0 then Return
  914.    If pos("HTTP:",upper(a))~=0 then return
  915.    If pos("FTP:",upper(a))~=0 then return
  916.    
  917.  
  918.    If pos(">",a)~=0 then do
  919.       a=resubstr(a, "\=[^: ]+[>: ]")
  920.       a=Strip(a,'T',">")
  921.    end
  922.    else do
  923.       a=resubstr(a, "\=[^: ]+[^: $]")
  924.       a=Left(a,Length(a)-1)
  925.    End
  926.  
  927.    If lastpos(d2c(13),a)~=0 then a=Left(a,lastpos(d2c(13),a)-1)
  928.    a=Strip(a,'T'," ")
  929.    a=Strip(a,'L',"=")
  930.    a=Strip(a,'B',d2c(34))
  931.    Zahl=Zahl+1
  932.    link.zahl=a
  933.    linkzeile.zahl=Zeile
  934. Return
  935.  
  936. AnkerInOldlink:
  937.    If parent=true then do
  938.       a=pos("#",oldlink)
  939.       If a~=0 then oldlink=Delstr(oldlink,a)
  940.       link=oldlink
  941.    End
  942. Return
  943.  
  944. Schreiben:
  945.  
  946. If Fehler~=0 then CALL RXTR_WRITEFILE("T:LinkCheckResult",HauptFehler)
  947. If (anchor=1 & AnkerFehler~=0) then CALL RXTR_WRITEFILE("T:LinkCheckResult-Anchor",anchorFehler)
  948. If (case=1 & UnixFehler~=0) then CALL RXTR_WRITEFILE("T:LinkCheckResult-Unix",caseFehler)
  949.  
  950. Return
  951. /*******************************************************************************
  952. ** Routine, die bei einer Unterbrechung des Scripts aufgerufen wird
  953. *******************************************************************************/
  954.  
  955. SYNTAX:
  956.    CALL quit('Error' rc 'in line' sigl '-' ERRORTEXT(rc)||R||SOURCELINE(sigl)||R||'Please contact the author...',20)
  957.  
  958. BREAK_C:
  959.    CALL quit('You breaked the session...',20)
  960.    
  961.  
  962. /*******************************************************************************
  963. ** Script beenden
  964. *******************************************************************************/
  965.  
  966. quit:
  967.    PARSE ARG message,rcode
  968.  
  969.    IF app ~= '00000000'x THEN DO
  970.       IF message ~= '' THEN
  971.          Call rtezrequest(message,"_Okay","ATTENTION")
  972.  
  973.       If ende=0 then CALL TR_DELETEAPP(app)
  974.       If ende2=0 then CALL TR_DELETEAPP(app2)
  975.    END
  976.    ELSE
  977.       IF message ~= '' THEN DO
  978.          SAY message
  979.          SAY
  980.          OPTIONS PROMPT 'Please press <RETURN>.'
  981.          PULL taste
  982.       END
  983.    Call Schreiben
  984.    address command "c:flushtrx all"
  985.    EXIT
  986.